
import axios from "axios"
import store from '../store/index'

const axiosInstance = axios.create({
  baseURL: "http://127.0.0.1:8000/",
  timeout: 10000,
  withCredentials: true,
})

// 请求拦截器
axiosInstance.interceptors.request.use(
  (config) => {
    // 不需要token的接口列表
    const noAuthUrls = [
      '/api/user/login/',
      '/api/user/register/',
    ];
    
    // 检查当前请求URL是否在不需要token的列表中
    const shouldNotAddToken = noAuthUrls.some(url => 
      config.url.includes(url)
    );
    
    // 只有不在免认证列表中的请求才添加token
    if (!shouldNotAddToken) {
      // 从localStorage获取token
      let token = store.state.user.token || localStorage.getItem('token');
      if (token) {
        config.headers.Authorization = `Bearer ${token}`;
      }
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);
 
// 响应拦截器 - 简化版
axiosInstance.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    // 统一错误处理
    if (error.response) {
      // 服务器返回了错误响应
      const status = error.response.status;
      
      // 处理401未授权错误 - 直接清除登录状态
      if (status === 401 || status === 403) {
        // 清除用户状态
        store.commit('user/CLEAR_USER');
        localStorage.removeItem('token');
        localStorage.removeItem('userType');
        localStorage.removeItem('username');
        // 仅在控制台记录错误信息
        console.error('Token过期或无效，已清除登录状态');
      } else if (status === 500) {
        alert('服务器错误，请稍后再试！');
      }
    } else if (error.request) {
      // 请求发出但没有收到响应
      console.error('网络错误，请检查网络连接');
      alert('网络连接失败，请检查网络！');
    } else {
      // 其他错误
      console.error('请求配置错误:', error.message);
    }
    return Promise.reject(error);
  }
);

export default axiosInstance;